import re
from urllib.request import urlopen, urlretrieve
from PIL import Image  # 确保安装了 Pillow 库：pip install Pillow
import ctypes  # 导入 ctypes 库
from os.path import abspath
from datetime import datetime as dt

def get_latest_wallpaper_url(markdown_content):
    """
    从 Markdown 内容中提取最新日期的壁纸 URL。

    Args:
        markdown_content (str): Markdown 文件内容。

    Returns:
        str: 最新日期的壁纸 URL，如果未找到则返回 None。
    """
    # 匹配日期和 URL 的正则表达式
    pattern = re.compile(r'(\d{4}-\d{2}-\d{2})\s*\|\s*\[.*?\]\((.*?)\)')
    matches = pattern.findall(markdown_content)

    if not matches:
        print("未找到任何匹配的日期和 URL。")
        return None

    # 找到最新的日期
    latest_date = None
    latest_url = None
    for date_str, url in matches:
        try:
            date = dt.strptime(date_str, '%Y-%m-%d').date()
            if latest_date is None or date > latest_date:
                latest_date = date
                latest_url = url
        except ValueError:
            print(f"无法解析日期字符串：{date_str}")
            continue

    if latest_url:
        print(f"最新日期：{latest_date}, URL：{latest_url}")
        return latest_url
    else:
        print("未找到有效的日期和 URL。")
        return None

def set_wallpaper(image_path_bmp):
    """
    使用 BMP 格式的图片文件设置壁纸（Windows）。

    Args:
        image_path_bmp (str): BMP 格式的图片文件路径。
    """
    try:
        # 设置壁纸（Windows）
        SPI_SETDESKWALLPAPER = 0x0014
        SPIF_UPDATEINIFILE = 0x01
        SPIF_SENDWININICHANGE = 0x02
        ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, image_path_bmp, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE)

        print("壁纸设置成功！")

    except Exception as e:
        print(f"设置壁纸失败：{e}")


def main():
    """
    主函数。
    """
    # GitHub 仓库 raw 文件的 URL
    github_raw_url = "https://raw.githubusercontent.com/niumoo/bing-wallpaper/main/bing-wallpaper.md"

    try:
        # 从 GitHub 下载 Markdown 文件内容
        with urlopen(github_raw_url) as response:
            markdown_content = response.read().decode('utf-8')

        # 获取最新壁纸 URL
        latest_wallpaper_url = get_latest_wallpaper_url(markdown_content)

        if latest_wallpaper_url:
            # 下载图片
            image_path_jpg = "wallpaper.jpg"
            urlretrieve(latest_wallpaper_url, image_path_jpg)

            # 转换为 BMP 格式
            image_path_bmp = abspath("wallpaper.bmp")  # 获取绝对路径
            img = Image.open(image_path_jpg)
            img.save(image_path_bmp, "BMP")

            # 设置壁纸
            set_wallpaper(image_path_bmp)
        else:
            print("无法获取最新壁纸 URL。")

    except Exception as e:
        print(f"发生错误：{e}")

if __name__ == "__main__":
    main()